﻿using System;
using System.Collections.ObjectModel;
using Oracle.DataAccess.Client;

namespace ISHotelApp.Database
{
    [Serializable]
    public class ObjednavkaStravovaniTable : DbTable
    {
        public static String TABLE_NAME = "Objednavka_stravovani";

        public String SQL_SELECT = "SELECT * FROM Objednavka_stravovani";
        public String SQL_SELECT_id_stravovani = "SELECT * FROM Objednavka_stravovani WHERE id_stravovani=:id_stravovani AND id_pobytu=:id_pobytu";
        public String SQL_SELECT_id_pobytu = "SELECT * FROM Objednavka_stravovani WHERE id_pobytu=:id_pobytu";
        public String SQL_INSERT = "INSERT INTO Objednavka_stravovani (id_stravovani, id_pobytu, mnozstvi_stravovani) VALUES (:id_stravovani, :id_pobytu, :mnozstvi_stravovani)";
        public String SQL_DELETE = "DELETE FROM Objednavka_stravovani WHERE id_stravovani=:id_stravovani AND id_pobytu=:id_pobytu";

        public ObjednavkaStravovaniTable()
            : base(TABLE_NAME)
        {
        }

        /**
 * Insert the record.
 **/
        public int Insert(ObjednavkaStravovani Objednavka_stravovani)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_INSERT);
            PrepareCommand(command, Objednavka_stravovani);
            int ret = mDatabase.Insert(command);
            mDatabase.Close();
            return ret;
        }

        /**
         * Prepare a command.
         **/

        private void PrepareCommand(OracleCommand command, ObjednavkaStravovani Objednavka_stravovani)
        {
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_stravovani, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_stravovani].Value = Objednavka_stravovani.id_stravovani;

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_pobytu].Value = Objednavka_stravovani.id_pobytu;

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_mnozstvi_stravovani, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_mnozstvi_stravovani].Value = Objednavka_stravovani.mnozstvi_stravovani;
        }

        /**
         * Select records.
         **/
        public Collection<ObjednavkaStravovani> Select()
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_SELECT);
            OracleDataReader reader = mDatabase.Select(command);

            Collection<ObjednavkaStravovani> Objednavka_stravovanis = Read(reader);
            reader.Close();
            mDatabase.Close();
            return Objednavka_stravovanis;
        }

        /**
         * Select the record.
         **/
        public ObjednavkaStravovani Select(int id_stravovani, int id_pobytu)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_SELECT_id_stravovani);

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_stravovani, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_stravovani].Value = id_stravovani;
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_pobytu].Value = id_pobytu;

            OracleDataReader reader = mDatabase.Select(command);

            Collection<ObjednavkaStravovani> Objednavka_stravovanis = Read(reader);
            ObjednavkaStravovani Objednavka_stravovani1 = null;
            if (Objednavka_stravovanis.Count == 1)
            {
                Objednavka_stravovani1 = Objednavka_stravovanis[0];
            }
            reader.Close();
            mDatabase.Close();
            return Objednavka_stravovani1;
        }

        public ObjednavkaStravovani Select(int id_pobytu)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_SELECT_id_pobytu);

            
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_pobytu].Value = id_pobytu;

            OracleDataReader reader = mDatabase.Select(command);

            Collection<ObjednavkaStravovani> Objednavka_stravovanis = Read(reader);
            ObjednavkaStravovani Objednavka_stravovani1 = null;
            if (Objednavka_stravovanis.Count == 1)
            {
                Objednavka_stravovani1 = Objednavka_stravovanis[0];
            }
            reader.Close();
            mDatabase.Close();
            return Objednavka_stravovani1;
        }


        private Collection<ObjednavkaStravovani> Read(OracleDataReader reader)
        {
            Collection<ObjednavkaStravovani> Objednavka_stravovanis = new Collection<ObjednavkaStravovani>();

            while (reader.Read())
            {
                ObjednavkaStravovani Objednavka_stravovani = new ObjednavkaStravovani();
                Objednavka_stravovani.id_pobytu = (int)reader.GetDecimal(0);
                Objednavka_stravovani.id_stravovani = (int)reader.GetDecimal(1);
                Objednavka_stravovani.mnozstvi_stravovani = (int)reader.GetDecimal(2);
                Objednavka_stravovanis.Add(Objednavka_stravovani);
            }
            return Objednavka_stravovanis;
        }

        /**
         * Delete the record.
         */
        public int Delete(int id_stravovani, int id_pobytu)
        {
            mDatabase.Connect();
            OracleCommand command = mDatabase.CreateCommand(SQL_DELETE);

            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_stravovani, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_stravovani].Value = id_stravovani;
            command.Parameters.Add(new OracleParameter(":" + ObjednavkaStravovani.ATTR_id_pobytu, OracleDbType.Decimal));
            command.Parameters[":" + ObjednavkaStravovani.ATTR_id_pobytu].Value = id_pobytu;
            int ret;
            try
            {
                ret = mDatabase.Delete(command);
            }
            catch (Exception e)
            {
                throw e;
            }
            mDatabase.Close();
            return ret;
        }
    }
}